package com.crr.service.impl;

import com.crr.common.utils.RedisUtils;
import com.crr.mapper.GoodsMapper;
import com.crr.service.GoodsService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.Iterator;
import java.util.List;
import java.util.Map;
@Slf4j
@Service
public class GoodsServiceImpl implements GoodsService {

    private  final String SK_LIST="sklist";//秒杀缓存
    private final int SK_LIST_TTL=5000;//秒
    @Autowired
    RedisUtils redisUtils;
    @Autowired
    GoodsMapper goodsMapper;

    @Override

    public List<Map> query() {
        List<Map> list=null;
        //先查询缓存
        Object obj=redisUtils.get(SK_LIST);
        if(null==obj){
            //若缓存中没有 则查数据库
            list = goodsMapper.query();
            //查到的数据缓存redis
            redisUtils.setEx(SK_LIST,list,SK_LIST_TTL);
            //缓存商品的数量
            //遍历集合
            if(null!=list){
                Iterator<Map> it = list.iterator();
                while (it.hasNext()){
                    Map next = it.next();
                    String key="goods:id:"+next.get("id");
                    String stock = next.get("stock").toString();
                    redisUtils.set(key,stock);
                    String price = next.get("price").toString();
                    redisUtils.set(key+":price",price);
                    String goodsname = next.get("goodsname").toString();
                    redisUtils.set(key+":goodsname",goodsname);
                }
            }
        } // 缓存中有，则直接取出
        if (obj instanceof List) {
            list = (List<Map>) obj;
        } else {
            // 如果从缓存中获取的对象类型不符合预期，则可以记录日志或采取其他补救措施
            // 如果需要，可以在这里从数据库重新加载数据
            list = goodsMapper.query();
        }
        return list;
    }

    @Override
    public int updateStock(int goodsId, int num) {
        return goodsMapper.updateStock(goodsId,num);
    }
}
